/**
 * Copyright (c) 2009 Sylvain Gougouzian (sylvain@gougouzian.fr)
 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
 * GNU GPL (http://www.gnu.org/licenses/gpl.html) licensed.
 *
 * jQuery moodular effects by Sylvain Gougouzian http://sylvain.gougouzian.fr
 */

jQuery(function($) {
	$.extend($.fn.moodulite.effects.init,{
		right: function (m) {
			var elems = $('> ' + m.opts.item, m.e);
			m.e.html('');
			for(var i=0; i < elems.length; i++)
				m.e.prepend(elems[i]);
			m.e.prepend($('> ' + m.opts.item + ':last', m.e));
			m.opts.move = function (c, b) {
				c.e.animate({
					left: (c.dir == 1 ? '+=' : '-=') + c.size + 'px'
				}, c.opts.speed, c.opts.easing, function () { 
					b(); 
				});
			};
		},
		top: function (m) {
			m.vertical = true;
			m.opts.move = function (c, b) {
				c.e.animate({
					top: (c.dir == 1 ? '-=' : '+=') + c.size + 'px'
				}, c.opts.speed, c.opts.easing, function () {
					b();
				});
			};
		},
		bottom: function (m) {
			m.vertical = true;
			var elems = $('> ' + m.opts.item, m.e);
			m.e.html('');
			for(var i=0; i < elems.length; i++)
				m.e.prepend(elems[i]);
			m.e.prepend($('> ' + m.opts.item + ':last', m.e));
			m.opts.move = function (c, b) {
				c.e.animate({
					top: (c.dir == 1 ? '+=' : '-=') + c.size + 'px'
				}, c.opts.speed, c.opts.easing, function () {
					b();
				});
			};
		},
		fade: function (m) {
			$('> ' + m.opts.item, m.e).css({
				'position' : 'absolute',
				'z-index' : 1,
				'opacity' : 0
			});
			$('> ' + m.opts.item + ':first', m.e).css({
				'z-index' : 3,
				'opacity' : 1
			});
			$('> ' + m.opts.item, m.e).eq(1).css('z-index', 2);
			m.opts.move = function (c, b) {
				$('> ' + c.opts.item, c.e).eq(1).animate({
					opacity: 1
				}, c.opts.speed, c.opts.easing);
				$('> ' + c.opts.item + ':first', c.e).animate({
					opacity: 0
				}, c.opts.speed, c.opts.easing, function () {
					b();
				});
			};
		},
		legend: function (m) {
			$('#' + m.opts.legendId).html($('> ' + m.opts.item + ':first .legend', m.e).html());
		}
	});
	$.extend($.fn.moodulite.effects.before,{
		right: function (m) {
			if (m.dir == 1) {
				m.e.prepend($('> ' + m.opts.item + ':last', m.e));
				m.e.css('left', '-' + m.size + 'px');
			}
		},
		top: function (m) {
			if (m.dir == -1) {
				m.e.prepend($('> ' + m.opts.item + ':last', m.e));
				m.e.css('top', '-' + m.size + 'px');
			}
		},
		bottom: function (m) {
			if (m.dir == 1) {
				m.e.prepend($('> ' + m.opts.item + ':last', m.e));
				m.e.css('top', '-' + m.size + 'px');
			}
		},
		fade: function (m) {
			if (m.dir == -1) {
				$('> ' + m.opts.item + ':first', m.e).after($('> ' + m.opts.item + ':last', m.e));
			}
			$('> ' + m.opts.item, m.e).css({
				'opacity' : 0,
				'z-index' : 1
			});
			$('> ' + m.opts.item + ':first', m.e).css({
				'z-index' : 3,
				'opacity' : 1
			});
			$('> ' + m.opts.item, m.e).eq(1).css('z-index', 2);
		},
		legend: function (m) {
			$('#' + m.opts.legendId).fadeOut(m.opts.legendSpeed);
		}
	});
	$.extend($.fn.moodulite.effects.after,{
		right: function (m) {
			if (m.dir == -1) {
				m.e.append($('> ' + m.opts.item + ':first', m.e));
				m.e.css('left', 0);
			}
		},
		top: function (m) {
			if (m.dir == 1) {
				m.e.append($('> ' + m.opts.item + ':first', m.e));
				m.e.css('top', 0);
			}
		},
		bottom: function (m) {
			if (m.dir == -1) {
				m.e.append($('> ' + m.opts.item + ':first', m.e));
				m.e.css('top', 0);
			}
		},
		fade: function (m) {
			m.e.append($('> ' + m.opts.item + ':first', m.e));
			if (m.dir == -1) {
				$('> ' + m.opts.item + ':first', m.e).after($('> ' + m.opts.item + ':last', m.e));
			}
			$('> ' + m.opts.item, m.e).css({
				'opacity' : 0,
				'z-index' : 1
			});
			$('> ' + m.opts.item + ':first', m.e).css({
				'z-index' : 3,
				'opacity' : 1
			});
			$('> ' + m.opts.item, m.e).eq(1).css('z-index', 2);
		},
		legend: function (m) {
			$('#' + m.opts.legendId).html($('> ' + m.opts.item + ':first .legend', m.e).html()).fadeIn(m.opts.legendSpeed);
		}
	});
	$.extend($.fn.moodulite.effects.resize,{
		top: function (m) {
			m.size = parseInt(m.e.parent().height());
			m.e.height(2 * m.size + 'px');
			$('>' + m.opts.item, m.e).height(m.size);
		},
		bottom: function (m) {
			m.size = parseInt(m.e.parent().height());
			m.e.height(2 * m.size + 'px');
			$('>' + m.opts.item, m.e).height(m.size);
		}
	});
});